<?php

//声明编码
@header("Content-Type:text/html;charset=utf-8");

/**
 * 跳转提醒方法
 * @param $msg 提醒的文案内容
 * @param $url 跳转的地址
 * @return 无返回值
 */
function Notice($msg = '未知消息', $url = '')
{
    if(empty($url))
    {
        echo "<script>alert('$msg');history.go(-1);</script>";
    }else
    {
        echo "<script>alert('$msg');location.href='$url';</script>";
    }
    return;
}

/**
 * 单张图片上传
 * @param name input中file的name名
 * @param path 存放的地址
 * @return 返回结果信息
 */

function Upload($name='file',$path='',$type=['jpg','jpeg','png','webp','gif']){
    // 封装返回结果
    $success = [
        'result' => true, //返回成功或者失败
        'msg' => '',//返回的提示信息
        'data' => '' //返回的数据
    ];

    // 先获取到上传的文件信息,是一个数组
    $file = @isset($_FILES[$name]) ? $_FILES[$name] : [];

    // 如果为空
    if(empty($file)){
        $success['result'] = false;
        $success['msg'] = '上传的文件为空，请重新上传';
        return $success;
    }
    
    // 判断一下上传的文件是否有错误信息
    $error = $file['error'];
    if($error > 0){
        switch($error){
            case 1:
                $success['result'] = false;
                $success['msg'] = "超出了服务器上传限制大小";
                break;
            case 2:
                $success['result'] = false;
                $success['msg'] = "超出了表单上传限制大小";
                break;
            case 3:
                $success['result'] = false;
                $success['msg'] = "网络错误，文件上传失败";
                break;
            case 4:
                $success['result'] = false;
                $success['msg'] = "无文件上传";
                break;
            default:
                $success['result'] = false;
                $success['msg'] = "未知错误";
                break;
        }
        return $success;
    }

    // 上传文件名
    // 唯一的名字
    $filename = date("YmdHis")."_".$file["name"];
    
    // 判断是否是规定的类型
    $ext = pathinfo($filename,PATHINFO_EXTENSION);
    
    // 判断是否是允许上传的类型
    if(!in_array($ext,$type)){
        $success['result'] = false;
        $success['msg'] = "非法类型，上传失败";
        return $success;
    }
    // 判断要存放的路径是否存在，如果不存在就创建
    if(!is_dir($path)){
        // 创建
        $res = mkdir($path,0777,true);
        var_dump($res);
        exit;
        // 创建失败
        if(!$res){
            $success['result'] = false;
            $success['msg'] = "创建文件夹失败";
            return $success;
        }
    }
    // 将上传的路径拼接
    $path = trim($path,"/");
    // 覆盖路径
    $filename = $path."/".$filename;

    // 判断上传的临时文件是否安全
    if(is_uploaded_file($file['tmp_name'])){
        // 移动
        $res = move_uploaded_file($file['tmp_name'],$filename);

        // 判断是否上传成功
        if($res){
            $success['result'] = true;
            $success['msg'] = "上传成功";
            $success['data'] = $filename;
            return $success;
        }else{
            $success['result'] = false;
            $success['msg'] = "上传失败";
            return $success;
        }
    }else{
        $success['result'] = false;
        $success['msg'] = "非法上传";
        return $success;
    }
}

/* 
*   获取当前的网址   
*/

function get_url()
{
    // 获取当前的完整地址
    $str = $_SERVER['PHP_SELF'] . '?';

    if($_GET){
        foreach($_GET as $k => $v){
            if($k != 'page'){
                $str.= $k.'='.$v.'&';
            }
        }
    }

    return $str;
}

/**
 * 输出分页函数
 * @param $current 当前页
 * @param $count   记录总数(查询数据表的总数)
 * @param $limit   每页显示多少条
 * @param $size    显示页码
 * @param $class   样式
 */
function page($current, $count, $limit, $size, $class = 'digg')
{
    $page = '';

    // 判断是否显示分页
    if ($count > $limit) {
        // 总分页
        $pages = ceil($count / $limit);

        // 获取地址
        $url = get_url();

        $page .= '<div class="' . $class . '">';

        // 首页 上一页
        if ($current == 1) {
            $page .= '<span class="disabled">首&nbsp;页</span>';
            $page .= '<span class="disabled">上一页</span>';
        } else {
            $page .= '<a href="' . $url . 'page=1">首&nbsp;页</a>';
            $page .= '<a href="' . $url . 'page=' . ($current - 1) . '">上一页</a>';
        }

        // 中间部分显示页码，  取的页码范围
        if ($current <= floor($size / 2)) {
            // 当前页在中间位置靠左,floor()向下取整
            $start  =  1;
            // 如果总页数大于中间显示多少页,结束数字就是中间显示多少页的数字,否则结束数字就是总页数
            $end = $pages < $size ? $pages : $size;
        } else if ($current >= $pages - floor($size / 2)) {
            // 当前页在中间位置靠右 避免页数出现0或者负数
            $start = $pages - $size + 1 <= 0 ? 1 : $pages - $size + 1;
            $end = $pages;
        } else {
            // 当前页刚好在中间位置
            $start = $current - floor($size / 2);
            $end = $current + floor($size / 2);
        }

        for ($i = $start; $i <= $end; $i++) {
            if ($i == $current) {
                $page .= '<span class="current">' . $i . '</span>';
            } else {
                $page .= '<a href="' . $url . 'page=' . $i . '">' . $i . '</a>';
            }
        }

        // 下一页 尾页
        if ($pages == $current) {
            $page .= '<span class="disabled">下一页</span>';
            $page .= '<span class="disabled">尾&nbsp;页</span>';
        } else {
            $page .= '<a href="' . $url . 'page=' . ($current + 1) . '">下一页</a>';
            $page .= '<a href="' . $url . 'page=' . $pages . '">尾&nbsp;页</a>';
        }

        $page .= '</div>';
    }

    return $page;
}

/**
 * 获取本机的IP地址
 */
function GetClientIP(){
    global $pre_;
    // 调用接口，返回json
    $json = file_get_contents("http://ip-api.com/json/");

    // 把json变成php数组
    $res = json_decode($json,true);
    // var_dump($res);
    // exit;
    
    // 获取城市信息
    $city = isset($res['city']) ? trim($res['city']) : '';
    // var_dump($city);
    // exit;
    // 如果不为空，就要去数据库中查询
    if(empty($city)){
        return null;
    }

    $sql = "SELECT name AS city,province FROM {$pre_}region WHERE pinyin LIKE '%$city%' ";
    $region = find($sql);
    
    if(!$region){
        return null;
    }

    // 如果找到了城市就返回
    return $region;
}

/**
 * 获取天气情况
 * @param city 城市
 * @return 天气情况
 */
function GetWeatherInfo($city=''){
    $success = [
        'result' => false,
        'msg' => ''
    ];

    if(empty($city)){
        $success['result'] = false;
        $success['msg'] = "城市信息为空";
        return $success;
    }
    // 天气情况接口
    $url = "https://api.asilu.com/weather/?city=$city";

    // 请求接口
    $json = file_get_contents($url);

    // 把json转换为php数组
    $res = json_decode($json,true);

    // 获取第一天的天气
    $info = $res['weather'][0];

    // 如果天气信息为空
    if(empty($info)){
        $success['result'] = false;
        $success['msg'] = "未获取到当前城市的天气情况";
        return $success;
    }

    $date = $info['date']; //日期
    $weather = $info['weather']; //天气
    $temp = $info['temp']; //温度
    $wind = $info['wind']; //风向

    $success['result'] = true;
    $success['msg'] = "$date $weather $temp $wind";
    return $success;
    
}

/**
 * 获得随机字符串
 * @param $len             需要的长度
 * @param $special        是否需要特殊符号
 * @return string       返回随机字符串
 */
function randstr($len = 10, $special = false)
{
    $chars = array(
        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
        "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
        "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
        "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
        "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
        "3", "4", "5", "6", "7", "8", "9"
    );

    if ($special) {
        $chars = array_merge($chars, array(
            "!", "@", "#", "$", "?", "|", "{", "/", ":", ";",
            "%", "^", "&", "*", "(", ")", "-", "_", "[", "]",
            "}", "<", ">", "~", "+", "=", ",", "."
        ));
    }

    $charsLen = count($chars) - 1;
    shuffle($chars);                            //打乱数组顺序
    $str = '';
    for ($i = 0; $i < $len; $i++) {
        $str .= $chars[mt_rand(0, $charsLen)];    //随机取出一位
    }
    return $str;
}






/**
 * 单条数据查询方法
 * @param $sql 要执行的sql语句
 * @return 返回查询的结果
 */
function find($sql = "")
{
    //引入全局变量
    global $link;

    //执行语句
    $query = @mysqli_query($link, $sql);

    //判断是否执行成功
    if(!$query)
    {
        echo "【SQL语句】：$sql <br /> 【错误信息】：".mysqli_error($link);
        exit;
    }

    //返回出查询的结果 返回关联数组
    return mysqli_fetch_assoc($query);
}

/**
 * 多条数据查询方法
 * @param $sql 要执行的sql语句
 * @return 返回查询的结果
 */
function all($sql = '')
{
    //引入全局变量
    global $link;

    //执行语句
    $query = mysqli_query($link, $sql);

    //判断是否执行成功
    if(!$query)
    {
        echo "【SQL语句】：$sql <br /> 【错误信息】：".mysqli_error($link);
        exit;
    }

    //获取数据
    $list = [];

    //循环拿数据
    while($data = mysqli_fetch_assoc($query))
    {
        $list[] = $data;
    }

    //返回数据结果，二维数组
    return $list;
}

/**
 * 插入数据的方法
 * @param table 要插入的表格
 * @param data 要插入的数据
 * @return 返回插入的结果
 */

function add($table='',$data=[]){
    // 引入全局变量
    global $link;
    global $pre_;

    // 组装成一个完整的表名
    $table = $pre_.$table;

    // INSERT INTO 表名(`字段1`,`字段2`,`字段3`)VALUES('值1','值2','值3')

    // 把索引单独抽出放在一个数组中
    $keys = array_keys($data);
    // var_dump($keys);
    // exit;
    // 把数组转换成字符串
    $str = "`".implode("`,`",$keys)."`";
    // var_dump($str);
    // exit;

    $values = "'".implode("','",$data)."'";
    // var_dump($values);
    // exit;

    // 插入语句
    $sql = "INSERT INTO $table($str)VALUES($values)";

    // 执行sql语句
    $query = mysqli_query($link,$sql);

    // 判断是否执行成功
    if(!$query)
    {
        echo "【SQL语句】：$sql <br /> 【错误信息】：".mysqli_error($link);
        exit;
    }

    // 返回自增id
    return mysqli_insert_id($link);
}   

/**
 * 删除数据的方法
 * @param table 要插入的表格
 * @param where 条件
 * @return 返回影响行数
 */

function delete($table='',$where='1'){
    // 引入全局变量
    global $link;
    global $pre_;

    // 拼接表名
    $table = $pre_.$table;

    // 删除语句
    $sql = "DELETE FROM $table WHERE $where";
    $query = mysqli_query($link,$sql);

    // 判断是否执行成功
    if(!$query)
    {
        echo "【SQL语句】：$sql <br /> 【错误信息】：".mysqli_error($link);
        exit;
    }

    return mysqli_affected_rows($link);
}

/**
 * 更新数据的方法
 * @param table 要更新的表格
 * @param data 要更新的数据
 * @param where 条件
 * @return 返回影响行数
 */

function edit($table='',$data,$where='1'){
    // 引入全局变量
    global $link;
    global $pre_;

    // 拼接表名
    $table = $pre_.$table;

    // UPDATE 表名 SET `字段1`='值1',`字段2`='值2' WHERE 条件
    $str = '';
    foreach($data as $key=>$value){
        $str .= "`$key`='$value',";
    }
    $str = trim($str,",");

    $sql = "UPDATE $table SET $str WHERE $where";

    $query = mysqli_query($link,$sql);
    // 判断是否执行成功
    if(!$query)
    {
        echo "【SQL语句】：$sql <br /> 【错误信息】：".mysqli_error($link);
        exit;
    }

    return mysqli_affected_rows($link);
}
?>